/*
 * Copyright(c)2018,2024,guowenmeng24@163.comAllrightsreserved.
 */
package com.bkhech.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.bkhech.RedisKeyConstant;
import com.bkhech.enums.PlatformEnum;

import java.util.UUID;

/**
 * UserTokenUtil
 * 用户 token 管理，运行多设备登录
 *
 *@author guowm
 *@date 2024/11/15
 */
public class UserTokenUtil {

    private static final RedisOperator redisOperator = SpringUtil.getBean(RedisOperator.class);

    /**
     * 获取用户ID
     * @param userToken
     * @return 用户ID
     */
    public static String getToken(String userToken) {
        return redisOperator.get(RedisKeyConstant.REDIS_USER_TOKEN + userToken);
    }

    /**
     * 设置用户 token
     *  使用 redis 存储 token，以支持分布式会话
     *  设置过期时间，默认为 7 天
     * @param userId
     * @param platform {@link PlatformEnum}
     * @return 返回设置的 token
     */
    public static String setToken(String userId, PlatformEnum platform) {
        String userToken = platform.getType() + StrUtil.DOT + UUID.randomUUID();

        // 本方式只能限制用户在一台设备进行登录
//        redisOperator.set(RedisKeyEnum.REDIS_USER_TOKEN.getKey() + userId, userToken);

        // 本方式运行用户在多端多设备进行登录
        redisOperator.set(RedisKeyConstant.REDIS_USER_TOKEN + userToken, userId, 60 * 60 * 24 * 7);
        return userToken;
    }

    public static void removeToken(String userToken) {
        redisOperator.del(RedisKeyConstant.REDIS_USER_TOKEN + userToken);
    }

}